package br.com.sumap.bd;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class NotaTecnicaDAO {
	
	private Connection connection;
	
	//construtor
	public NotaTecnicaDAO(){
		this.connection = new ConnectionFactory().getConnection();
	}
	
	/*
	 * Adiciona Nota Tecnica passada por parametro
	 */
	public void add(NotaTecnica notaTecnica){
		String SQL = "INSERT into "+VONotaTecnica.NM_TABLE +
					 "("+VONotaTecnica.NM_COL_ID_ACAO+", "+VONotaTecnica.NM_COL_SIT_ATUAL+", "+VONotaTecnica.NM_COL_GARGALO +
					 ", "+VONotaTecnica.NM_COL_MED_CORRETIVA+", "+VONotaTecnica.NM_COL_RESPONSAVEL+", "+VONotaTecnica.NM_COL_PRAZO+")" +
					 "value (?,?,?,?,?,?)";
		try{
			PreparedStatement stmt = connection.prepareStatement(SQL);
			stmt.setInt   (1, notaTecnica.getId_acao());
			stmt.setString(2, notaTecnica.getSituacao_atual());
			stmt.setString(3, notaTecnica.getGargalo());
			stmt.setString(4, notaTecnica.getMedida_corretiva());
			stmt.setString(5, notaTecnica.getResponsavel());
			stmt.setString(6, notaTecnica.getPrazo());
			
			stmt.execute();
			stmt.close();
		}
		catch(SQLException err){
			throw new RuntimeException(err);
		}
	}
	
	/*
	 * Remove Nota Tecnica passada por parametro
	 */
	public void delete(NotaTecnica notaTecnica){
		String SQL = "DELETE FROM "+VONotaTecnica.NM_TABLE+" WHERE "+VONotaTecnica.NM_COL_ID+"=?";
		
		try{
			PreparedStatement stmt = connection.prepareStatement(SQL);
			stmt.setInt(1,notaTecnica.getId());
			stmt.execute();
			stmt.close();
		}
		catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	/*
	 * Retorna List com todas as Notas Tecnicas retornadas na consulta
	 */
	public List<NotaTecnica> getList(){
		try{
			List<NotaTecnica> notasTecnicas = new ArrayList<NotaTecnica>();
			
			PreparedStatement stmt = connection.prepareStatement("SELECT * FROM "+VONotaTecnica.NM_TABLE);
			ResultSet rs = stmt.executeQuery();
			
			while(rs.next()){
				//cria Nota Tecnica
				NotaTecnica nt = new NotaTecnica();
				nt.setId(rs.getInt(VONotaTecnica.NM_COL_ID));
				nt.setId_acao(rs.getInt(VONotaTecnica.NM_COL_ID_ACAO));
				nt.setSituacao_atual(rs.getString(VONotaTecnica.NM_COL_SIT_ATUAL));
				nt.setResponsavel(rs.getString(VONotaTecnica.NM_COL_RESPONSAVEL));
				nt.setPrazo(rs.getString(VONotaTecnica.NM_COL_PRAZO));
				nt.setGargalo(rs.getString(VONotaTecnica.NM_COL_GARGALO));
				nt.setMedida_corretiva(rs.getString(VONotaTecnica.NM_COL_MED_CORRETIVA));
				
				//adiciona a NotaTecnica ao Array
				notasTecnicas.add(nt);
			}
			
			//fecha o statement e o result e retorna a lista de notas tecnicas
			stmt.close();
			rs.close();
			return notasTecnicas;
		}
		
		catch(SQLException e){
			throw new RuntimeException(e);
		}
	}
	
	/*
	 * Altera a Nota Tecnica passada por parametro
	 */
	public void change(NotaTecnica nt){
		String SQL = "UPDATE "+VONotaTecnica.NM_TABLE+" "+VONotaTecnica.NM_COL_ID_ACAO+"=?, "+VONotaTecnica.NM_COL_SIT_ATUAL+
				     "=?, "+VONotaTecnica.NM_COL_GARGALO +"=?, "+VONotaTecnica.NM_COL_MED_CORRETIVA+"=?, "+VONotaTecnica.NM_COL_RESPONSAVEL+
				     "=?, "+VONotaTecnica.NM_COL_PRAZO+"=? WHERE "+VONotaTecnica.NM_COL_ID+"=?";
		try {
			PreparedStatement stmt = connection.prepareStatement(SQL);
			stmt.setInt   (1, nt.getId_acao());
			stmt.setString(2, nt.getSituacao_atual());
			stmt.setString(3, nt.getGargalo());
			stmt.setString(4, nt.getMedida_corretiva());
			stmt.setString(5, nt.getResponsavel());
			stmt.setString(6, nt.getPrazo());
			stmt.setInt   (7, nt.getId());
			
			stmt.execute();
			stmt.close();
			
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		
	}

}
